[2025-07-11] CSRF

🦥 본문

정의

사용자가 의도하지 않은 요청을 공격자가 대신 전송하게 만드는 공격. 임의 이용자의 권한으로 임의 주소에 HTTP 요청을 보낼수 있는 취약점.

동작 흐름

  1. 공격자가 작성한 악성 스크립트를 이용자가 실행

     <img src='http://bank.dreamhack.io/sendmoney?to=Dreamhack&amount=1337' width=0px height=0px>
        
     /* 새 창 띄우기 */
     window.open('http://bank.dreamhack.io/sendmoney?to=Dreamhack&amount=1337');
     /* 현재 창 주소 옮기기 */
     location.href = 'http://bank.dreamhack.io/sendmoney?to=Dreamhack&amount=1337';
     location.replace('http://bank.dreamhack.io/sendmoney?to=Dreamhack&amount=1337');
    
  2. 공격자의 악성 사이트가 서버에 요청을 보냄
  3. 브라우저는 인증 쿠키를 자동으로 붙여 전송
  4. 쿠키를 이용하여 민감 정보에 접근/탈취

XSS와 공통점&차이점

공통점 : 클라이언트 대상 공격. 악성 스크립트가 포함된 페이지에 접속하도록 유도

차이점 XSS CSRF
공격 자유도 공격자의 자유도 높음(JS로 할 수 있는 모든것) Backend Level에서 지원하는 로직만 악용 가능
방어 접근법 필터링으로 비정상적인 요청 검열 정상적인 req도 정상적인 사용자의 것인지 검증
목적 쿠키 탈취, 공격할 사이트의 오리진에서 스크립트를 실행 임의 페이지에 HTTP 요청을 보내는 것을 목적. 이용자의 권한으로 웹 서비스의 임의 기능을 실행

대응 방안

  1. CSRF Token 사용 : Request를 보낼 때마다 갱신되는 토큰. 브라우저와 서버말고는 알 수 없음. 패킷을 낚아채도 CSRF가 갱신되므로 필터링 가능
  2. Cookie에 “SameSite’ Flag 사용 : 외부 사이트에서 발생한 요청에 대해 서버는 쿠키를 반환하지 않음
  3. Refere 헤더 검증 : 개발자가 임의로 “요청을 보낸 곳”을 확인할 수 있음 → 잘 사용 X
  4. 사용자 세션 검증 강화
  5. CORS 정책 강화 : 교차 출처 리소스 공유; 서로 다른 출처의 웹페이지나 서버가 자원에 접근할 수 있도록 허용하는 기술. CSP와 CORS를 섞어 씀

Categories:

Updated:

Leave a comment